package org.ellwood.framework.mybatis.handler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.context.annotation.Configuration;

import java.util.Date;

/**
 * @BelongsProject: ellwood-pro
 * @BelongsPackage: org.ellwood.framework.mybatis.handler
 * @BelongsClass: MyMetaObjectHandler
 * @Description: // 自动填充配置  --  实现对create_time、update_time等的值自动插入和更新 @Author: ellwood
 * @CreateTime: 2024/1/30 - 16:21
 * @Version: V1.0.0
 */
@Configuration
public class MyMetaObjectHandler implements MetaObjectHandler {

    private final static String CREATE_TIME = "createTime";
    private final static String UPDATE_TIME = "updateTime";
    private final static String STATUS = "status";
    private final static String VERSION = "version";
    private final static String DELETED = "deleted";


    @Override
    public void insertFill(MetaObject metaObject) {

        // 自动填充状态字段，先检查字段是否已经设置了值，如果没有设置则设置默认值
        Object fieldValue = getFieldValByName(STATUS, metaObject);
        if (fieldValue==null) {
            setFieldValByName(STATUS, 0, metaObject);
        }

        // 自动填充乐观锁version字段
        this.strictInsertFill(metaObject,VERSION,Integer.class,1);

        // 创建者 // TODO 权限控制完成之后再进行设置

        //  自动填充create_time字段
        this.setFieldValByName(CREATE_TIME, new Date(), metaObject);
        //  自动填充create_time、update_time字段
        this.setFieldValByName(UPDATE_TIME, new Date(), metaObject);
        // 删除标识
        strictInsertFill(metaObject,DELETED,Integer.class,0);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        // 更新者  // TODO 权限控制完成之后再进行设置
        this.setFieldValByName(UPDATE_TIME, new Date(), metaObject);
    }

}
